const jwt = require('jsonwebtoken');
const db = require('../config/database');
const logger = require('../utils/logger');

// 从adminAuthController获取JWT_SECRET
const JWT_SECRET = process.env.ADMIN_JWT_SECRET || 'admin-secret-key-change-in-production-2024';

/**
 * 管理员认证中间件
 * 验证JWT Token并检查管理员权限
 */
const adminAuth = async (req, res, next) => {
  try {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN

    if (!token) {
      return res.status(401).json({
        success: false,
        message: '未授权访问，请先登录',
        code: 'NO_TOKEN'
      });
    }

    // 验证JWT
    let decoded;
    try {
      decoded = jwt.verify(token, JWT_SECRET);
    } catch (error) {
      if (error.name === 'TokenExpiredError') {
        return res.status(401).json({
          success: false,
          message: '登录已过期，请重新登录',
          code: 'TOKEN_EXPIRED'
        });
      }
      
      if (error.name === 'JsonWebTokenError') {
        return res.status(401).json({
          success: false,
          message: '无效的访问令牌',
          code: 'INVALID_TOKEN'
        });
      }

      throw error;
    }

    // 查询管理员信息
    const [admins] = await db.query(
      'SELECT id, username, real_name, role, status FROM admins WHERE id = ?',
      [decoded.adminId]
    );

    if (admins.length === 0) {
      return res.status(401).json({
        success: false,
        message: '管理员不存在',
        code: 'ADMIN_NOT_FOUND'
      });
    }

    const admin = admins[0];

    // 检查管理员状态
    if (admin.status !== 1) {
      return res.status(403).json({
        success: false,
        message: '管理员账号已被禁用',
        code: 'ADMIN_DISABLED'
      });
    }

    // 将管理员信息添加到请求对象
    req.admin = {
      adminId: admin.id,
      username: admin.username,
      realName: admin.real_name,
      role: admin.role
    };

    next();
  } catch (error) {
    logger.error('管理员认证失败:', { error: error.message });
    return res.status(500).json({
      success: false,
      message: '服务器内部错误',
      code: 'SERVER_ERROR'
    });
  }
};

/**
 * 超级管理员权限验证
 * 仅超级管理员可以执行某些敏感操作
 */
const superAdminAuth = async (req, res, next) => {
  try {
    if (!req.admin) {
      return res.status(401).json({
        success: false,
        message: '未授权访问'
      });
    }

    if (req.admin.role !== 'superadmin') {
      return res.status(403).json({
        success: false,
        message: '权限不足，需要超级管理员权限',
        code: 'INSUFFICIENT_PERMISSION'
      });
    }

    next();
  } catch (error) {
    logger.error('权限验证失败:', { error: error.message });
    return res.status(500).json({
      success: false,
      message: '服务器内部错误'
    });
  }
};

module.exports = {
  adminAuth,
  superAdminAuth,
  JWT_SECRET
};

